import java.util.ArrayList;

/**
 * Hulpclass voor tekstgebaseerde menu's. Nummering van menukeuzes gebeurt
 * automatisch. Toevoegen van een "stopitem" is verplicht. Dit item krijgt
 * standaard de menuwaarde 0.
 * 
 * @author Etto Salomons en Douwe van Twillert
 * 
 */
public class MenuKiezer {
	private String				titel;
	private String				inputVraag;
	private ArrayList<String>	menuItems			= new ArrayList<String>();
	private boolean				stopItemToegevoegd	= false;

	public MenuKiezer( String eenTitel, String eenInputVraag ) {
		titel      = eenTitel;
		inputVraag = eenInputVraag;
	}

	public void addItem( String item ) {
		menuItems.add( item );
	}

	public void addStopItem( String item ) {
		menuItems.add( 0, item );
		stopItemToegevoegd = true;
	}

	public int getMenukeuze() {
		int keuze = -1;

		while ( keuze == -1 ) {
			toonMenu();
			keuze = TuiHelper.stelVraagMetGetalAntwoord( inputVraag );
		}

		return keuze;
	}

	private void toonMenu() {
		if ( !stopItemToegevoegd ) {
			// menu moet altijd een stop item bevatten, dit werkt dus altijd!
			addStopItem( "(FOUT!!! Er is nog geen stop item toegevoegd aan dit menu)" );
			// Normaal doe je dit met exception handling, maar in dit voorbeeld
			// houden we het nog eenvoudig omdat ook op andere plekken
			// code toegevoegd moet worden.
		}

		System.out.println( "\n\n\n"                             );
		System.out.println( "==================================" );
		System.out.printf ( "=  %-30s=\n", titel                 );
		System.out.println( "==================================" );

		// druk eerst alle gewone items af en als laatste het stopitem
		for ( int i = 1; i < menuItems.size(); i++ ) {
			System.out.printf( "%3d. %s\n", i, menuItems.get( i ) );
		}
		System.out.printf( "%3d. %s\n", 0, menuItems.get( 0 ) );
	}


	// Convenience function: kan gebruikt worden voor leesbaarheid
	public String getMenukeuzeString() {
		int keuze = getMenukeuze();
		return menuItems.get( keuze );
	}
	
	public void setMenuTitel(String titel){
		this.titel = titel;
	}
}